home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2005 October
/
PCWOCT05.iso
/
Software
/
FromTheMag
/
XAMPP 1.4.14
/
xampp-win32-1.4.14-installer.exe
/
xampp
/
php
/
pear
/
Image
/
Barcode
/
ean13.php
< prev
next >
Wrap
PHP Script
|
2004-03-24
|
9KB
|
252 lines
<?php
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
//
// +----------------------------------------------------------------------+
// | PHP version 4.0 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2001 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Didier FOURNOUT <didier.fournout@nyc.fr> |
// +----------------------------------------------------------------------+
//
// $Id: ean13.php,v 1.1 2003/01/21 11:46:20 jason Exp $
//
require_once "PEAR.php";
require_once "Image/Barcode.php";
/**
* Class to create a EAN 13 barcode
*
* @author Didier FOURNOUT <didier.fournout@nyc.fr>
*/
class Image_Barcode_ean13 extends Image_Barcode
{
/**
* Barcode type
* @var string
*/
var $_type = 'ean13';
/**
* Barcode height
*
* @var integer
*/
var $_barcodeheight = 50;
/**
* Font use to display text
*
* @var integer
*/
var $_font = 2; // gd internal small font
/**
* Bar width
*
* @var integer
*/
var $_barwidth = 1;
/**
* Number set
* @var array
*/
var $_number_set = array(
'0' => array(
'A' => array(0,0,0,1,1,0,1),
'B' => array(0,1,0,0,1,1,1),
'C' => array(1,1,1,0,0,1,0)
),
'1' => array(
'A' => array(0,0,1,1,0,0,1),
'B' => array(0,1,1,0,0,1,1),
'C' => array(1,1,0,0,1,1,0)
),
'2' => array(
'A' => array(0,0,1,0,0,1,1),
'B' => array(0,0,1,1,0,1,1),
'C' => array(1,1,0,1,1,0,0)
),
'3' => array(
'A' => array(0,1,1,1,1,0,1),
'B' => array(0,1,0,0,0,0,1),
'C' => array(1,0,0,0,0,1,0)
),
'4' => array(
'A' => array(0,1,0,0,0,1,1),
'B' => array(0,0,1,1,1,0,1),
'C' => array(1,0,1,1,1,0,0)
),
'5' => array(
'A' => array(0,1,1,0,0,0,1),
'B' => array(0,1,1,1,0,0,1),
'C' => array(1,0,0,1,1,1,0)
),
'6' => array(
'A' => array(0,1,0,1,1,1,1),
'B' => array(0,0,0,0,1,0,1),
'C' => array(1,0,1,0,0,0,0)
),
'7' => array(
'A' => array(0,1,1,1,0,1,1),
'B' => array(0,0,1,0,0,0,1),
'C' => array(1,0,0,0,1,0,0)
),
'8' => array(
'A' => array(0,1,1,0,1,1,1),
'B' => array(0,0,0,1,0,0,1),
'C' => array(1,0,0,1,0,0,0)
),
'9' => array(
'A' => array(0,0,0,1,0,1,1),
'B' => array(0,0,1,0,1,1,1),
'C' => array(1,1,1,0,1,0,0)
)
);
var $_number_set_left_coding = array(
'0' => array('A','A','A','A','A','A'),
'1' => array('A','A','B','A','B','B'),
'2' => array('A','A','B','B','A','B'),
'3' => array('A','A','B','B','B','A'),
'4' => array('A','B','A','A','B','B'),
'5' => array('A','B','B','A','A','B'),
'6' => array('A','B','B','B','A','A'),
'7' => array('A','B','A','B','A','B'),
'8' => array('A','B','A','B','B','A'),
'9' => array('A','B','B','A','B','A')
);
function draw($text, $imgtype = 'png')
{
//TODO: Check if $text is number and len=13
// Calculate the barcode width
$barcodewidth = (strlen($text)) * (7 * $this->_barwidth)
+ 3 // left
+ 5 // center
+ 3 // right
+ imagefontwidth($this->_font)+1
;
$barcodelongheight = (int) (imagefontheight($this->_font)/2)+$this->_barcodeheight;
// Create the image
$img = ImageCreate($barcodewidth, $barcodelongheight+ imagefontheight($this->_font)+1);
// Alocate the black and white colors
$black = ImageColorAllocate($img, 0, 0, 0);
$white = ImageColorAllocate($img, 255, 255, 255);
// Fill image with white color
imagefill($img, 0, 0, $white);
// get the first digit which is the key for creating the first 6 bars
$key = substr($text,0,1);
// Initiate x position
$xpos = 0;
// print first digit
imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black);
$xpos= imagefontwidth($this->_font) + 1;
// Draws the left guard pattern (bar-space-bar)
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// space
$xpos += $this->_barwidth;
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// Draw left $text contents
$set_array=$this->_number_set_left_coding[$key];
for ($idx = 1; $idx < 7; $idx ++) {
$value=substr($text,$idx,1);
imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
foreach ($this->_number_set[$value][$set_array[$idx-1]] as $bar) {
if ($bar) {
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
}
$xpos += $this->_barwidth;
}
}
// Draws the center pattern (space-bar-space-bar-space)
// space
$xpos += $this->_barwidth;
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// space
$xpos += $this->_barwidth;
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// space
$xpos += $this->_barwidth;
// Draw right $text contents
for ($idx = 7; $idx < 13; $idx ++) {
$value=substr($text,$idx,1);
imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
foreach ($this->_number_set[$value]['C'] as $bar) {
if ($bar) {
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
}
$xpos += $this->_barwidth;
}
}
// Draws the right guard pattern (bar-space-bar)
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// space
$xpos += $this->_barwidth;
// bar
imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
$xpos += $this->_barwidth;
// Send image to browser
switch($imgtype) {
case 'gif':
header("Content-type: image/gif");
imagegif($img);
imagedestroy($img);
break;
case 'jpg':
header("Content-type: image/jpg");
imagejpeg($img);
imagedestroy($img);
break;
default:
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
break;
}
return;
} // function create
} // class